package com.sevent;

/*
有一个大小为 N*M 的园子，雨后积起了水。八连通的积水被认为是连接在一起的。请求出
园子里总共有多少水洼？（八连通指的是下图中相对 W 的*的部分）

    ***
    *W*
    ***

限制条件

 N, M ≤ 100

 样例:

 输入
    N=10, M=12

园子如下图（'W'表示积水， '.'表示没有积水）

W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

输出

    3

 */

import java.util.Scanner;

public class dfs题目三_水娃数 {
    public static int ans = 0;
    private static int N;
    private static int M;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        M = sc.nextInt();
        sc.nextLine();
        char[][] arr = new char[N][];
        for (int i = 0; i < N; i++) {
            arr[i] = sc.nextLine().toCharArray();
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                if (arr[i][j] == 'W') {
                    dfs(arr, i, j);
                    ans++;
                }
            }
        }
        System.out.println(ans);

    }

    private static void dfs(char[][] arr, int x, int y) {

        arr[x][y] = '.';

        for (int i = 0; i < 8; i++) {
            if (x+getDirection(i)[0] >= 0 && x+getDirection(i)[0] <= arr.length - 1 && y+getDirection(i)[1] >= 0 && y+getDirection(i)[1] <= arr[1].length - 1) {
                if (arr[x+getDirection(i)[0]][y+getDirection(i)[1]]=='W'){
                    dfs(arr, x+getDirection(i)[0], y+getDirection(i)[1]);
                }
            }
        }
    }


    public static int[] getDirection(int n) {
        int[][] directionArr = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1}}; // 需要走的八个方向
        return directionArr[n];
    }
}
